﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using FluentValidation;

using Revis.VClinicNet.App.Internal.Dto.Validation.Fluent;

namespace Revis.VClinicNet.App.Internal.Dto.Validation
{
    public class WorkerUserCreateDtoRules : ValidationRules<WorkerUserCreateDto>
    {
        public override void SetUpRules()
        {
            RuleFor(w => w.FirstName)
                .RequireWithMessage("Imie nie może być puste");
            RuleFor(w => w.Surname)
                .RequireWithMessage("Nazwisko nie może być puste");
            RuleFor(w => w.Login)
                .RequireWithMessage("Login nie może być pusty")
                .Must((w,l) => Login(w.Login)).WithMessage("Login powinien być dłuższy niż 6 znaków");
            RuleFor(w => w.Password)
                .RequireWithMessage("Hasło nie może być puste")
                .Must((w,p)=> Password(w.Password)).WithMessage("Hasło powinno być dłuższe niż 6 znaków");
            RuleFor(w => w.RepeatedPassword)
                .RequireWithMessage("Hasła nie są równe")
                .Must((dto, rp) => dto.Password == rp).WithMessage("Hasła nie są równe");
        }

        private bool Login(string login)
        {
            return login != null ? login.Length >= 6 : false;
        }

        private bool Password(string password)
        {
            return password != null ? password.Length >= 6 : false;
        }
    }

    public class WorkerUserEditDtoRules : ValidationRules<WorkerUserEditDto>
    {
        public override void SetUpRules()
        {
            RuleFor(w => w.FirstName)
                .RequireWithMessage("Imie nie może być puste");
            RuleFor(w => w.Surname)
                .RequireWithMessage("Nazwisko nie może być puste");
            RuleFor(w => w.Login)
                .RequireWithMessage("Login nie może być pusty")
                .Must((w, l) => Login(w.Login)).WithMessage("Login powinien być dłuższy niż 6 znaków");            
        }

        private bool Login(string login)
        {
            return login != null ? login.Length >= 6 : false;
        }       
    }

    public class WorkerUserModifyPasswordDtoRules : ValidationRules<WorkerUserModifyPasswordDto>
    {
        public override void SetUpRules()
        {
            RuleFor(w => w.Password)
                .RequireWithMessage("Hasło nie może być puste")
                .Must((w, p) => Password(w.Password)).WithMessage("Hasło powinno być dłuższe niż 6 znaków");
            RuleFor(w => w.RepeatedPassword)
                .RequireWithMessage("Hasła nie są równe")
                .Must((dto, rp) => dto.Password == rp).WithMessage("Hasła nie są równe");
        }      

        private bool Password(string password)
        {
            return password != null ? password.Length >= 6 : false;
        }
    }
}
